﻿using BancoSim.Ventanas_Modales;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace BancoSim.Paginas
{
    /// <summary>
    /// Lógica de interacción para pgSimulacionBancaria.xaml
    /// </summary>
    public partial class pgSimulacionBancaria : Page
    {
        Frame frameSimulacionBancaria;
        List<ucLista> listasEspera;      //Lista de grupos de servicio.    
        cwAgregarGrupo cwAgregarGrupo;   //Ventana para agregar grupo.
        public pgSimulacionBancaria(Frame f)
        {
            InitializeComponent();
            frameSimulacionBancaria = f;
        }

        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            listasEspera = new List<ucLista>();
            cwAgregarGrupo = new cwAgregarGrupo();
        }

        private void itNuevoGrupo_Click(object sender, RoutedEventArgs e)
        {

            cwAgregarGrupo = new cwAgregarGrupo(cwAgregarGrupo.CantGrupos);   //Se muestra la ventana

            cwAgregarGrupo.ShowDialog();                                           //para agregar un grupo.

            if (cwAgregarGrupo.DialogResult == true && cwAgregarGrupo.CantGrupos > 0) //Si el grupo fue guardado
            {                                                                         //y no se ha cumplido el limite de grupos. 
                int numeroCajas = cwAgregarGrupo.NumCajas;            
                string nombreGrupo = cwAgregarGrupo.Nombre;
                Brush color = cwAgregarGrupo.Color;
                cwAgregarGrupo.CantGrupos--;                                                //Decrementa la cantidad de grupos.
                agregarNuevoGrupo(numeroCajas,nombreGrupo,color);                           //Se agrega un grupo nuevo
            }                                                                        // con los parametros guardados.

            if (cwAgregarGrupo.CantGrupos <= 0)
            {
                MessageBox.Show("Por cuestiones de espacio solamente se permite agregar 3 grupos de servicio.");
            }
        }
        /// <summary>
        /// Agrega un nuevo grupo de servicio.
        /// </summary>
        /// <param name="pNumCajas"></param>
        /// <param name="pNombreGrupo"></param>
        void agregarNuevoGrupo(int pNumCajas,string pNombreGrupo,Brush pColor)
        {
            switch (cwAgregarGrupo.CantGrupos)
            {
                case 3 :             //El primer grupo.
                    crearGrupoServicio(391, 496, pColor, pNombreGrupo);
                    if (cwAgregarGrupo.NumCajas == 1) 
                    {
                        crearCaja(398, 10, pColor, listasEspera[0]);  //Crea una caja nueva
                    }
                    if (cwAgregarGrupo.NumCajas == 2) 
                    {
                        crearCaja(271, 10, pColor, listasEspera[0]);
                        crearCaja(530, 10, pColor, listasEspera[0]);
                    }
                    break;
                case 2:              //El segundo grupo.
                    crearGrupoServicio(654, 496, pColor, pNombreGrupo);
                    
                    if (cwAgregarGrupo.NumCajas == 1) 
                    {
                        crearCaja(10, 130, pColor, listasEspera[0]);
                    }
                    if (cwAgregarGrupo.NumCajas == 2) 
                    {
                        crearCaja(10, 130, pColor, listasEspera[0]);
                        crearCaja(10, 300, pColor, listasEspera[0]);
                    }
                    break;
                case 1:              //El tercer grupo.
                    crearGrupoServicio(130, 496, pColor, pNombreGrupo);
                    
                    if (cwAgregarGrupo.NumCajas == 1) 
                    {
                        crearCaja(750, 130, pColor, listasEspera[0]);
                    }
                    if (cwAgregarGrupo.NumCajas == 2) 
                    {
                        crearCaja(750, 130, pColor, listasEspera[0]);
                        crearCaja(750, 300, pColor, listasEspera[0]);
                    }
                    break;
                default:
                    
                    break;
            }

        }
        /// <summary>
        /// Crea una caja de atencion al cliente.
        /// </summary>
        /// <param name="left"></param>
        /// <param name="top"></param>
        /// <param name="color"></param>
        /// <param name="lista"></param>
        void crearCaja(int left,int top,Brush color,ucLista lista)
        {
            ucCaja cajaNueva = new ucCaja(lista);   //Inicializa
            cajaNueva.Color = color;                //la caja asociando su lista de espera.
            Canvas.SetLeft(cajaNueva, left);     
            Canvas.SetTop(cajaNueva, top);         
            cvsBanco.Children.Add(cajaNueva);      // La agrega al canvas.
        }
        /// <summary>
        /// Crea un nuevo grupo de servicio.
        /// </summary>
        /// <param name="letf"></param>
        /// <param name="top"></param>
        /// <param name="color"></param>
        /// <param name="pNombre"></param>
        void crearGrupoServicio(int letf,int top,Brush color,string pNombre)
        {
            ucLista listaNueva = new ucLista(pNombre,color);  //Inicializa

            listasEspera.Insert(0,listaNueva);                //Agrega a la lista de listas de espera (grupos de servicio)

            Canvas.SetLeft(listaNueva, letf);
            Canvas.SetTop(listaNueva, top);
            cvsBanco.Children.Add(listaNueva);                //Agrega el grupo de servio al canvas.
        }

        private void itSalir_Click(object sender, RoutedEventArgs e)
        {
           
        }

        private void itGServicio_Click(object sender, RoutedEventArgs e)
        {
            cwListarGrupos listarGrupos = new cwListarGrupos();
            listarGrupos.ShowDialog();
        }   
    }
}
